package com.jade.journal;

/**
 * 业务日志接口。
 *
 * @author Daisy
 * @version 1.0 14-9-21 下午8:31
 */
public interface Journal
{
    /**
     * 返回日志名称。
     *
     * @return 业务日志名称。
     */
    public String getName();

    /**
     * 返回是不是当前可以进行STAT级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isStat();

    /**
     * 返回是不是当前可以进行INFO级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isInfo();

    /**
     * 返回是不是当前可以进行WARN级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isWarn();

    /**
     * 返回是不是当前可以进行NOTICE级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isNotice();

    /**
     * 返回是不是当前可以进行ERROR级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isError();

    /**
     * 返回是不是当前可以进行FATAL级别的日志记录，
     * 调用这个方法目的是在没有设置该级别的时候，阻止字符串的产生。<br>
     * 减少无谓的CPU消耗。
     */
    public boolean isFatal();

    /**
     * 记录一个stat级别的消息
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void stat(Object... param);

    public void statEntity(JournalEntity entity);

    /**
     * 记录一个info级别的消息.
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void info(Object... param);

    public void infoEntity(JournalEntity entity);

    /**
     * 记录一个warn级别的消息
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void warn(Object... param);

    public void warnEntity(JournalEntity entity);

    /**
     * 记录一个notice级别的消息
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void notice(Object... param);

    public void noticeEntity(JournalEntity entity);

    /**
     * 记录一个error级别的消息
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void error(Object... param);

    public void errorEntity(JournalEntity entity);

    /**
     * 记录一个fatal级别的消息
     *
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void fatal(Object... param);

    public void fatalEntity(JournalEntity entity);

    /**
     * 记录日志
     *
     * @param level 级别
     * @param param 消息参数,可以是String,String[],Parameters,List,Map或者 Entity Bean
     */
    public void journal(JournalLevel level, Object... param);

    public void journalEntity(JournalLevel level, JournalEntity entity);
}